package de.hauschild.dbc4j.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * The {@link Contracted} annotations marks a interface or class holding the contracts specified.
 * <p>
 * <b>Attention:</b> Currently AspectJ follows Java's rule that annotations on interfaces are not inherited. The
 * consequence for you if you contract a interface each implementing class has to have the {@link Contracted} annotation
 * too. A possible workaround now is to write your contracted interfaces as contracted abstract classes. In this case
 * extending classes doesn't need the {@link Contracted} annotation.
 * </p>
 * 
 * @author Klaus Hauschild
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Contracted {
}
